4 import controllers
.SelectionController
;
5 import controllers
.actions
.*;
7 import java
.awt
.event
.ActionEvent
;
8 import java
.awt
.event
.ActionListener
;
9 import java
.awt
.event
.KeyEvent
;
13 import javax
.swing
.undo
.*;
16 public class GraphFrame
extends JFrame
{
17 private static final long serialVersionUID
= -7929100929760152271L;
18 private GraphPanel panel
;
19 private UndoManager undoManager
;
21 private JMenuBar menubar
;
22 private JMenu menuOptionFile
;
23 private JMenu menuOptionEdit
;
25 private JMenuItem menuOptionFileClose
;
26 private JMenuItem menuOptionFileOpen
;
27 private SelectionController selectionController
;
28 private ActionListener onMenuFileClose
;
29 private ActionListener onMenuFileOpen
;
31 private JMenuItem menuOptionEditUndo
;
32 private JMenuItem menuOptionsEditRedo
;
33 private JMenuItem menuOptionEditAddNode
;
34 private JMenuItem menuOptionEditAddEdge
;
35 private JMenuItem menuOptionEditRemoveNode
;
36 private JMenuItem menuOptionFileSave
;
38 private ActionListener onMenuFileSave
;
39 private ActionListener onMenuEditUndo
;
40 private ActionListener onMenuEditRedo
;
41 private ActionListener onMenuEditAddNode
;
42 private ActionListener onMenuEditAddEdge
;
43 private ActionListener onMenuEditDeleteNode
;
45 public GraphFrame(GraphModel model
){
46 undoManager
= new UndoManager();
47 this.setTitle("Graph Editor");
48 this.setSize(500, 500);
49 menubar
= new JMenuBar();
50 this.setFocusable(true);
52 menuOptionFile
= new JMenu("File");
53 menuOptionFile
.setMnemonic(KeyEvent
.VK_F
);
54 menuOptionEdit
= new JMenu("Edit");
55 menuOptionEdit
.setMnemonic(KeyEvent
.VK_E
);
57 menuOptionFileClose
= new JMenuItem("Close program",KeyEvent
.VK_C
);
58 menuOptionFileClose
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_E
, Event
.CTRL_MASK
));
60 menuOptionFileOpen
= new JMenuItem("Openen",KeyEvent
.VK_O
);
61 menuOptionFileOpen
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_O
, Event
.CTRL_MASK
));
63 menuOptionEditUndo
= new JMenuItem("Ongedaan maken",KeyEvent
.VK_Z
);
64 menuOptionEditUndo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_Z
, Event
.CTRL_MASK
));
66 menuOptionEditAddNode
= new JMenuItem("Knoop toevoegen",KeyEvent
.VK_N
);
67 menuOptionEditAddNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_N
, Event
.CTRL_MASK
));
69 menuOptionEditAddEdge
= new JMenuItem("Kant toevoegen",KeyEvent
.VK_M
);
70 menuOptionEditAddEdge
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_M
, Event
.CTRL_MASK
));
72 menuOptionEditRemoveNode
= new JMenuItem("Delete Node",KeyEvent
.VK_D
);
73 menuOptionEditRemoveNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_DELETE
,Event
.SHIFT_MASK
));
75 menuOptionsEditRedo
= new JMenuItem("Herhalen",KeyEvent
.VK_R
);
76 menuOptionsEditRedo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_R
,Event
.CTRL_MASK
));
78 menuOptionFileSave
= new JMenuItem("Opslaan",KeyEvent
.VK_S
);
79 menuOptionFileSave
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_S
,Event
.CTRL_MASK
));
81 onMenuFileSave
= new ActionListener(){
82 public void actionPerformed(ActionEvent arg0
) {
88 onMenuFileClose
= new ActionListener(){
89 public void actionPerformed(ActionEvent arg0
) {
90 System
.exit(0); // TODO Werkt niet goed?
93 onMenuFileOpen
= new ActionListener(){
94 public void actionPerformed(ActionEvent arg0
) {
98 onMenuEditUndo
= new ActionListener(){
99 public void actionPerformed(ActionEvent arg0
) {
103 onMenuEditAddNode
= new ActionListener(){
104 public void actionPerformed(ActionEvent arg0
) {
105 GraphFrame
.this.undoManager
.addEdit(new AddNode(GraphFrame
.this.selectionController
));
108 onMenuEditAddEdge
= new ActionListener(){
109 public void actionPerformed(ActionEvent arg0
) {
110 selectionController
.doAddEdge();
114 onMenuEditDeleteNode
= new ActionListener(){
115 public void actionPerformed(ActionEvent arg0
){
116 undoManager
.addEdit(new DeleteNode(selectionController
));
119 onMenuEditRedo
= new ActionListener(){
120 public void actionPerformed(ActionEvent arg0
){
125 menuOptionFileClose
.addActionListener(onMenuFileClose
);
126 menuOptionEditAddNode
.addActionListener(onMenuEditAddNode
);
127 menuOptionEditAddEdge
.addActionListener(onMenuEditAddEdge
);
128 menuOptionEditUndo
.addActionListener(onMenuEditUndo
);
129 menuOptionFileOpen
.addActionListener(onMenuFileOpen
);
130 menuOptionEditRemoveNode
.addActionListener(onMenuEditDeleteNode
);
131 menuOptionsEditRedo
.addActionListener(onMenuEditRedo
);
132 menuOptionFileSave
.addActionListener(onMenuFileSave
);
134 menuOptionFile
.add(menuOptionFileOpen
);
135 menuOptionFile
.add(menuOptionFileSave
);
136 menuOptionFile
.addSeparator();
137 menuOptionFile
.add(menuOptionFileClose
);
139 menuOptionEdit
.add(menuOptionEditAddNode
);
140 menuOptionEdit
.add(menuOptionEditAddEdge
);
141 menuOptionEdit
.addSeparator();
142 menuOptionEdit
.add(menuOptionEditUndo
);
143 menuOptionEdit
.add(menuOptionsEditRedo
);
144 menuOptionEdit
.add(menuOptionEditRemoveNode
);
146 menubar
.add(menuOptionFile
);
147 menubar
.add(menuOptionEdit
);
148 setJMenuBar(menubar
);
150 panel
= new GraphPanel(model
);
156 protected void openFile()
158 final JFileChooser fc
= new JFileChooser();
159 int returnVal
= fc
.showOpenDialog(this);
160 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
161 doOpenFile(fc
.getSelectedFile());
166 private void doOpenFile(File f
) {
168 GraphModel model
= GraphModel
.fromFile(f
);
169 panel
.setModel(model
);
170 } catch (Exception e
) {
174 "An error occured trying to read the input file. \r\n" + e
175 .getMessage(), "Error",
176 JOptionPane
.ERROR_MESSAGE
);
180 protected void saveFile()
182 final JFileChooser fc
= new JFileChooser();
183 int returnVal
= fc
.showSaveDialog(this);
184 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
185 File file
= fc
.getSelectedFile();
187 panel
.getModel().writeToFile(file
);
189 JOptionPane
.showMessageDialog(this, (String
)("An error occured trying to save the current state to a file. \r\n" + e
.getMessage()) , "Error",JOptionPane
.ERROR_MESSAGE
);
194 public void addAction(UndoableEdit action
){
195 this.undoManager
.addEdit(action
);
198 public void selectedObject(boolean selected
) {
199 menuOptionEditAddEdge
.setEnabled(selected
);
200 menuOptionEditRemoveNode
.setEnabled(selected
);
202 public void setSelectionController(SelectionController s
) {
203 selectionController
= s
;
204 this.getPanel().setSelectionController(s
);
206 public GraphPanel
getPanel()